<?php
/**
 * dao dao
 * @package common_lib_dao
 */
/**
 * dao dao
 * @author pandajingjing
 * @package common_lib_dao
 */
class dao_dao{

	function __construct(){

	}

	/**
	 * 获取系统时间
	 * @return int
	 */
	protected static function getTime(){
		load_lib('/sys/variable');
		return sys_variable::getInstance()->getTime();
	}
	
	/**
	 * 获取实时时间
	 * @return int
	 */
	protected static function getRealTime(){
		return time();
	}

	/**
	 * 插入数据
	 * @param string $p_strTableName
	 * @param array $p_arrParam
	 * @param string $p_strDBName
	 * @return int/false
	 */
	protected static function addData($p_strTableName,$p_arrParam,$p_strDBName){
		$objORM=self::getORM($p_strTableName,$p_strDBName);
		foreach($p_arrParam as $strKey=>$mixValue){
			$objORM->$strKey=$mixValue;
		}
		return $objORM->addData();
	}

	/**
	 * 更新数据
	 * @param string $p_strTableName
	 * @param array $p_arrParam
	 * @param string $p_strDBName
	 * @return int
	 */
	protected static function updData($p_strTableName,$p_arrParam,$p_strDBName){
		$objORM=self::getORM($p_strTableName,$p_strDBName);
		foreach($p_arrParam as $strKey=>$mixValue){
			$objORM->$strKey=$mixValue;
		}
		return $objORM->updData();
	}

	/**
	 * 删除数据
	 * @param string $p_strTableName
	 * @param array $p_arrParam
	 * @param string $p_strDBName
	 */
	protected static function delData($p_strTableName,$p_arrParam,$p_strDBName){
		$objORM=self::getORM($p_strTableName,$p_strDBName);
		foreach($p_arrParam as $strKey=>$mixValue){
			$objORM->$strKey=$mixValue;
		}
		return $objORM->delData();
	}

	/**
	 * 根据数据库和表名称得到对应的ORM
	 * @param string $p_strTableName
	 * @param string $p_strDBName
	 * @param boolean $p_bolStrictMaster
	 * @return object
	 */
	protected static function getORM($p_strTableName,$p_strDBName,$p_bolStrictMaster=false){
		$p_strDBName=strtolower($p_strDBName);
		switch($p_strDBName){
			case 'dfs_db':
				load_lib('/orm/dfsorm');
				$objORM=new orm_dfsorm($p_strTableName,$p_bolStrictMaster);
				break;
			case 'user_db':
				load_lib('/orm/userorm');
				$objORM=new orm_userorm($p_strTableName,$p_bolStrictMaster);
				break;
			case 'drama_db':
				load_lib('/orm/dramaorm');
				$objORM=new orm_dramaorm($p_strTableName,$p_bolStrictMaster);
				break;
			default:
				load_lib('/orm/orm');
				$objORM=new orm_orm($p_strTableName,$p_bolStrictMaster);
				break;
		}
		return $objORM;
	}

	/**
	 * 获取配置信息
	 * @param string $p_strConfigName
	 * @param string $p_strConfigFile
	 * @return mix
	 */
	static function getConfig($p_strConfigName,$p_strConfigFile='common'){
		return get_config($p_strConfigName,$p_strConfigFile);
	}

	/**
	 * 返回数据库查询次数
	 * @return int
	 */
	static function getQueryCnt(){
		load_lib('/orm/orm');
		return orm_orm::getQueryCnt();
	}

	/**
	 * 返回缓存操作次数
	 * @return int
	 */
	static function getCacheCnt(){
		load_lib('/orm/orm');
		return orm_orm::getCacheCnt();
	}

	/**
	 * 发送队列消息
	 * @param mix $p_mixData
	 * @param string $p_strQueue
	 * @param string $p_strChannel
	 */
	static function sendMsg($p_mixData,$p_strQueue,$p_strChannel='mq_default_master'){
		load_lib('/mq/pooling');
		$objMsg=mq_pooling::getInstance()->getChannel($p_strChannel);
		$objMsg->bindQueue($p_strQueue);
		$objMsg->sendMessage($p_mixData);
	}

	/**
	 * 消费队列消息
	 * @param mix $p_mixUserFunc
	 * @param string $p_strQueue
	 * @param string $p_strChannel
	 */
	static function consumeMessage($p_mixUserFunc,$p_strQueue,$p_strChannel='mq_default_master'){
		load_lib('/mq/pooling');
		$objMsg=mq_pooling::getInstance()->getChannel($p_strChannel);
		$objMsg->bindQueue($p_strQueue);
		$objMsg->consumeMessage($p_mixUserFunc);
	}

	/**
	 * 执行SQL,此方法不提供Cache功能
	 * @param string $p_strDBName
	 * @param string $p_strTableName
	 * @param string $p_strSQL
	 * @param array $p_arrParameter
	 * @param string $p_strFetchType
	 * @param boolean $p_bolStrictMaster
	 * @return array
	 */
	static function executeSQL($p_strDBName,$p_strTableName,$p_strSQL,$p_arrParameter=array(),$p_strFetchType='ALL',$p_bolStrictMaster=false){
		$objORM=self::getORM($p_strTableName,$p_strDBName,$p_bolStrictMaster);
		return $objORM->executeSQL($p_strSQL,$p_arrParameter,$p_strFetchType);
	}
}